let CryptoJS = require('crypto-js')
const key = CryptoJS.enc.Utf8.parse('1234123412ABCDEF') //十六位十六进制数作为密钥
const iv = CryptoJS.enc.Utf8.parse('ABCDEF1234123412') //十六位十六进制数作为密钥偏移量
export default {
  /*【格式化时间】:年-月-日  时间*/
  dateFormat (e) {
    var date = new Date(e)
    var YY = date.getFullYear() + '-'
    var MM =
      (date.getMonth() + 1 < 10
        ? '0' + (date.getMonth() + 1)
        : date.getMonth() + 1) + '-'
    var DD = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
    var hh =
      (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':'
    var mm =
      (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) +
      ':'
    var ss =
      date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
    return YY + MM + DD + ' ' + hh + mm + ss
  },

  /*fn [function] 需要防抖的函数，,wait [number] 毫秒，防抖期限值；
    让事件在某个时间期限内（如1000ms）只执行一次
    */
  debounce (fn, wait) {
    let timeout
    return function () {
      if (timeout) clearTimeout(timeout)
      timeout = setTimeout(() => {
        fn.apply(this, arguments)
      }, wait)
    }
  },

  /*fn [function] 需要节流的函数,wait [number] 毫秒，等待值；
    等待指定时间后在重新激活函数
    */
  throttle (fn, wait) {
    let timeout
    return function () {
      if (!timeout) {
        timeout = setTimeout(() => {
          timeout = null
          fn.apply(this, arguments)
        }, wait)
      }
    }
  },

  /*
   * 加密>>
   * @param {String}   txt  需要加密的密码
   * @param {String}   keyStr  对密码加密的秘钥
   * @return {String}   加密的密文
   * */
  encrypt (word) {
    let srcs = CryptoJS.enc.Utf8.parse(word)
    let encrypted = CryptoJS.AES.encrypt(srcs, key, {
      iv: iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    })
    return encrypted.ciphertext.toString().toUpperCase()
  },

  /* 解密>> */
  decrypt (word) {
    let encryptedHexStr = CryptoJS.enc.Hex.parse(word)
    let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr)
    let decrypt = CryptoJS.AES.decrypt(srcs, key, {
      iv: iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    })
    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8)
    return decryptedStr.toString()
  }
}
